第八天 09/22
本日需要用到Gemini 1.5模型來建立一個基本面代理
一、 基本面代理與 Gemini 1.5 JSON 模式實作
為了讓前述的「計算器引擎」能夠動態接收高階財務假設,我們需要建立一個基本面代理(Fundamental Agent)。該代理利用 Gemini 1.5 模型的強大語意理解能力,並透過 responseMimeType: "application/json" 與 responseSchema 強制輸出結構化資料,自動生成適用於 DCF 模型的「基準(Base)」、「樂觀(Bull)」與「保守(Bear)」三種情境假設。
Python
from pydantic import BaseModel, Field
from google import genai
from google.genai import types
class ScenarioAssumptions(BaseModel):
wacc: float = Field(description="加權平均資金成本 (WACC),例:0.085")
terminal_growth_rate: float = Field(description="永續成長率,例:0.025")
revenue_growth_rates: list[float] = Field(description="未來5年的營收成長率列表")
operating_margin: float = Field(description="預期營業利益率,例:0.20")
class DCFScenarioResponse(BaseModel):
ticker: str
base_case: ScenarioAssumptions
bull_case: ScenarioAssumptions
bear_case: ScenarioAssumptions
reasoning: str = Field(description="簡短說明情境設定之基本面論述")
client = genai.Client()
response = client.models.generate_content(
model="gemini-1.5-pro", # 或 gemini-1.5-flash
contents="請分析台積電 (2330) 未來 5 年的基本面,並給出 DCF 三種情境的假設數據。",
config=types.GenerateContentConfig(
response_mime_type="application/json",
response_schema=DCFScenarioResponse,
temperature=0.2, # 低隨機性以維持數據穩定
),
)
TypeScript
// 引擎轉換管道概念實作
interface DCFInput {
wacc: number;
g: number;
fcfList: number[];
}
function runScenarioEvaluation(assumptions: ScenarioAssumptions, currentFCF: number, engine: CalculatorEngine): number {
// 1. 動態建構未來現金流公式表達式
let totalPV = 0;
assumptions.revenue_growth_rates.forEach((rate, index) => {
const year = index + 1;
const fcfExpr = ${currentFCF} * ((1 + ${rate}) ^ ${year}) / ((1 + ${assumptions.wacc}) ^ ${year});
totalPV += engine.evaluate(fcfExpr); // 呼叫先前實作的計算引擎
});
// 2. 計算終值 (Terminal Value) 併入
const lastFCF = currentFCF * assumptions.revenue_growth_rates.reduce((acc, r) => acc * (1 + r), 1);
const tvExpr = (${lastFCF} * (1 + ${assumptions.terminal_growth_rate})) / (${assumptions.wacc} - ${assumptions.terminal_growth_rate});
const tvPVExpr = (${tvExpr}) / ((1 + ${assumptions.wacc}) ^ 5);
totalPV += engine.evaluate(tvPVExpr);
return totalPV;
}
二、 實作過程中的核心困難與關鍵細節
將非確定性的 LLM 輸出對接到嚴謹的 DCF 計算引擎時,工程團隊必須特別留意以下幾點: